package com.xm.queue.util;

import java.util.concurrent.atomic.AtomicInteger;

import com.xm.queue.core.task.ITask;
import com.xm.util.old.StringUtil;

/**
 * 任务执行者
 * @author wang-xiaoming
 *
 */
public class TaskWorker implements Runnable{
	/**
	 * 任务管理器
	 */
	private final TaskManager taskManager;
	
	public TaskWorker(TaskManager taskManager) {
		this.taskManager = taskManager;
	}
	
	/**
	 * 异步任务执行次数
	 */
	private final AtomicInteger times = new AtomicInteger();
	
	@Override
	public void run() {
		System.out.println("任务队列已激活");
		
		ITask task;
		String threadName;
		while (true) {
			// 任务执行者一直在工作。。
			
			threadName = Thread.currentThread().getName();
			
			// 从任务队列获取一个任务
			task = this.taskManager.getTask();
			if(task != null){
				// 执行任务具体内容
				task.run();
				
				// 计数加一
				times.incrementAndGet();
				
				MyUtil.finishedTasks.put(threadName, StringUtil.toInt(MyUtil.finishedTasks.get(threadName), 0) + 1);
				
				System.out.println("当前线程号：" + threadName + "，第" + times.get() + "次执行异步任务，finishedTasks=" + MyUtil.finishedTasks);
			}
		}
	}
	
}
